/* 
 * ModelTestEvent.java
 * 
 * Data de criação: 30/10/2010
 * 
 * CORPORATIVO - MTE. 
 *
 */
package br.com.o2solutions.core.test.event;

import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import br.com.o2solutions.core.integration.repository.DataBaseIntegration;
import br.com.o2solutions.core.test.model.ModelTest;

/**
 * Classe responsável por realizar a "escuta" sobre os eventos persist, remove e
 * update lançados sobre o objeto {@link ModelTest}. Todos os testes são focados
 * apenas na injeção e interceptação correta das chamadas. Todos os eventos
 * Pos-<?> configuram o atributo
 * {@link ModelTest#setPassedEventListener(Boolean)} para false.
 * 
 * @author Osvaldeir
 * @since 30/10/2010
 * 
 */
public class ModelTestEvent {

	private Logger logger = LoggerFactory.getLogger(ModelTestEvent.class);

	@Autowired
	private DataBaseIntegration<ModelTest> modelTestDAO;

	@PostPersist
	public void postPersist(ModelTest modelTest) {
		logger.info("Evento de pos persistencia interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pos persistencia => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(false);
	}

	@PrePersist
	public void prePersist(ModelTest modelTest) {
		logger.info("Evento de pre persistencia interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pre persistencia => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(true);
	}
	
	@PostRemove
	public void postRemove(ModelTest modelTest) {
		logger.info("Evento de pos remocao interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pos remocao => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(false);
	}
	
	@PreRemove
	public void preRemove(ModelTest modelTest) {
		logger.info("Evento de pre remocao interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pre remocao => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(true);
	}
	
	@PostUpdate
	public void postUpdate(ModelTest modelTest) {
		logger.info("Evento de pos atualizacao interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pos atualizacao => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(false);
	}
	
	@PreUpdate
	public void preUpdate(ModelTest modelTest) {
		logger.info("Evento de pre atualizacao interceptado no objeto "
				+ modelTest);
		logger.info("Estado do objeto DAO na pre atualizacao => "
				+ modelTestDAO);
		modelTest.setPassedEventListener(true);
	}

}
